package com.ghck.server.service;
import java.util.List;
import java.util.Map;

import com.ghck.server.model.AjkAccount;
import com.ghck.server.model.query.AjkAccountQuery;
import com.ghck.server.model.request.ForgotPassword;
import com.ghck.server.model.request.GenerateVerCode;
import com.ghck.server.model.request.Login;
import com.ghck.server.model.request.Registration;
import com.ghck.server.model.request.ResetPassword;

/**
 * 账号接口认证表  <br>
 * ajk_account <br>
 * v1.0 2016-05-01
 */
 public interface AjkAccountService {
	
	/**
 	*根据ID删除 账号接口认证表
 	*/
 	public Integer deleteAjkAccountById(Integer id);
 	
 	/**
 	*新增 账号接口认证表
 	*/
 	public Integer batchInsertAjkAccount(List<? extends AjkAccount> ajkAccounts);
 	
 	/**
 	*新增 账号接口认证表
 	*/
 	public Integer insertAjkAccount(AjkAccount domain);
 
 	
 	/**
 	*更新 账号接口认证表
 	*/
 	public Integer updateAjkAccount(AjkAccount domain);
 	
 	/**
 	*根据ID查询 账号接口认证表
 	*/
 	public AjkAccount findAjkAccountById(Integer id);

	/**
 	*通过query 查询 账号接口认证表
 	*/
	public List<AjkAccount> findAjkAccountByQuery(AjkAccountQuery query);	
	
	/**
 	*通过query count总条数
 	*/
 	public Integer countAjkAccountByQuery(AjkAccountQuery query);
 	
 	/**
 	* 通过ids查询
 	*/
 	public List<AjkAccount> findAjkAccountByIds(List<Integer> ids);
 	
 	/**
 	 * 通过accessId 刷新认证信息
 	 * @param accessId
 	 */
 	public void flushCacheByAccessId(String accessId);
 	/**
 	 * 根据accessId查询用户
 	 * @param accessId
 	 * @return
 	 */
	public AjkAccount findByAccessId(String accessId);
	
	public Integer generateVerificationCode(GenerateVerCode generateVerCode);
	
	/**
	 * @param userId
	 * @param role
	 * @return 如果userId没有对应的account，则创建一个，如果有则返回
	 */
	public AjkAccount createAndInsertAccount(Integer userId,Integer role);
	
	public Map<String, Object> register(Registration registration);
	
	public Map<String, Object> login(Login login);
	
	/**
	 * 找回密码
	 * @param forgotPassword
	 * @return
	 */
	public Integer forgotPassword(ForgotPassword forgotPassword);
	
	/**
	 * 重置密码
	 * @param resetPassword
	 * @return
	 */
	public Integer resetPassword(ResetPassword resetPassword);
 	
}	